package com.practice.ajCollections010.list.arraylist;

import java.util.ArrayList;
import java.util.List;

/**
 * 向结合中新增元素：
 *                  1. 允许添加任何元素，其中包括 null；
 *                  2. 添加的所有元素都可以重复，其中包括 null；
 *                  3. 添加元素时有可能触发扩容操作，扩容机制是数组拷贝(比较消耗性能)
 */
public class AddElement {

    public static void main(String[] args) {
        List<String> list = new ArrayList<>(10);
        // 在 list 中添加元素
        list.add("Hello");
        list.add("World");
        // 在指定下表索引位置插入元素，大于该下标的元素(如果有)则向右移动(数组拷贝)
        list.add(0, "yang");
        list.stream().forEach(item -> {
            System.out.println(item);
        });

        System.out.println("=================================");

        List<String> list2 = new ArrayList<>(10);
        // 按照指定集合的 Iterator 返回的顺序，将指定集合的所有元素追加到此集合的末尾(数组拷贝)
        list2.addAll(list);
        list2.stream().forEach(item -> {
            System.out.println(item);
        });

        System.out.println("=================================");

        List<String> list3 = new ArrayList<>(10);
        list3.add("你好");
        // 从指定位置开始,将指定集合中的所有元素插入到此集合。将当前位置和任何后续元素右移(数组拷贝)
        list3.addAll(0, list2);
        list3.stream().forEach(item -> {
            System.out.println(item);
        });

        System.out.println("=================================");

        List<String> list4 = new ArrayList<>(10);
        list4.add(null);
        list4.add(null);
        list4.stream().forEach(item -> {
            System.out.println(item);
        });
    }
}
